Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

184
Visualizações
Electron: ¿Es seguro exponer los métodos de ipcRenderer con solo una declaración "protección" de "startsWith"?

Tengo una aplicación electrónica y estoy usando contextBridge.exposeInMainWorld para exponer algunos métodos de .on como .on, .removeListener e .invoke , estos métodos están "protegidos" al tener una declaración if que verifica si el "canal" pasado es válido .

Usando el siguiente código:

 const validateIPC = (channel) => { if (!channel || !channel.startsWith("myapp:")) return false; return true; }; contextBridge.exposeInMainWorld("electron", { ipcRenderer: { on(channel, listener) { if (validateIPC(channel)) { ipcRenderer.on(channel, (evt, message) => { listener(evt, message); }); } }, removeListener(channel, listener) { if (validateIPC(channel)) { ipcRenderer.removeListener(channel, (evt, message) => { listener(evt, message); }); } }, invoke(channel, data) { if (validateIPC(channel)) { return ipcRenderer.invoke(channel, data); } }, }, };

¿Es seguro verificar solo si el canal comienza con alguna cadena aleatoria? Vi esto en el código fuente de vscode disponible en github, sin embargo, también leí algunas soluciones usando una matriz de cadenas para validar los canales. Si es seguro, ¿por qué no puedo simplemente exponerlo sin verificar si el canal comienza con algún nombre aleatorio? ¿Hay algún canal predeterminado que no se pueda exponer?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Sí, es absolutamente seguro verificar si el nombre de su canal solo comienza con una cadena "cierta". Si se trata de una cadena "aleatoria", entonces se puede argumentar que hay pocas razones para preocuparse por implementar un sistema de "nomenclatura de canales".

Tiene razón en que puede exponer los métodos de ipcRenderer sin usar los nombres de los canales. Eso en sí mismo no es un problema de seguridad.

P.EJ:

 // Import the necessary Electron components. const contextBridge = require('electron').contextBridge; const ipcRenderer = require('electron').ipcRenderer; // Exposed protected methods in the render process. contextBridge.exposeInMainWorld("electron", { ipcRenderer: { on(channel, listener) { ipcRenderer.on(channel, (evt, message) => { listener(evt, message); }); }, removeListener(channel, listener) { ipcRenderer.removeListener(channel, (evt, message) => { listener(evt, message); }); }, invoke(channel, data) { return ipcRenderer.invoke(channel, data); } } };

Lo que es un problema de seguridad es si configura nodeIntegration: true y contextIsolation: false durante la creación de su ventana. Eso permitiría que cualquier persona que pueda ejecutar Javascript en su representación (por ejemplo, si DevTools aún está accesible) acceder al hilo principal y posiblemente llamar a todo tipo de funciones definidas por el usuario y Node.js. EG: Acceso a bases de datos en línea o API utilizando cualquier clave de API codificada de subproceso principal.

Otra preocupación de seguridad sería si agrega API de electrones particulares a su secuencia de comandos preload.js que simplemente no debería ser accesible desde los subprocesos de procesamiento.

En cuanto a los "canales predeterminados que no se pueden exponer", los canales en sí no son un problema, son las funciones subyacentes (expuestas) las que pueden plantear un problema de seguridad si se puede acceder a ellas desde los subprocesos de procesamiento.

La implementación de un sistema de "nomenclatura de canales" dentro de su archivo preload.js solo permite una forma más fácil de rastrear y administrar eventos de IPC, tal como se hace con los eventos de Node.js. No es para todos y de ninguna manera es obligatorio / requerido tener un script preload.js que use el sistema de "nombre de canal". Es una preferencia puramente personal.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda